package month1;

public class FindMedianSortedArrays4_07 {
    public static void main(String[] args) {
        System.out.println(findMedianSortedArrays(new int[]{1, 3}, new int[]{2}));
    }

    static double findMedianSortedArrays(int[] nums1, int[] nums2) {
        int m = nums1.length, n = nums2.length;
        if (m > n) {
            return findMedianSortedArrays(nums2, nums1);
        }
        int mid1 = 0, mid2 = 0, l = 0, r = m;
        while(l <= r) {
            int i = l + r >> 1;
            int j = (m + n + 1 >> 1) - i;
            int numI1 = Integer.MIN_VALUE, numI = Integer.MAX_VALUE, numJ = Integer.MAX_VALUE, numJ1 = Integer.MIN_VALUE;
            if (i > 0) {
                numI1 = nums1[i - 1];
            }
            if (i < m) {
                numI = nums1[i];
            }
            if (j > 0) {
                numJ1 = nums2[j - 1];
            }
            if (j < n) {
                numJ = nums2[j];
            }
            if (numI1 <= numJ) {
                mid1 = Math.max(numI1, numJ1);
                mid2 = Math.min(numI, numJ);
                l = i + 1;
            } else {
                r = i - 1;
            }
        }
        if ((m + n) % 2 == 0) {
            return (mid1 + mid2) / 2.0;
        }
        return mid1;
    }
}
